class Solution {
    public boolean isValidSudoku(char[][] board) {
        //每一行
        boolean[][] dp = new boolean[9][9];
        //每一列
        boolean[][] co = new boolean[9][9];
        //每一个3*3
        boolean[][] bl = new boolean[9][9];
        //判断每行
        for (int i =0; i < 9 ; i++ ){
            for(int j = 0 ; j < 9; j++){
                //board 不为空
                if(board[i][j] != '.'){
                    //计算出他应该存放的位置，比如5，应该存放在4号位置，
                    int num = board[i][j] - '1';
                    //在哪一个3*3的格子中
                    int boxindex = i/ 3 * 3 + j / 3;
                    if(dp[i][num] || co[j][num] || bl[boxindex][num]) return false;
                    dp[i][num] = true;
                    co[j][num] = true;
                    bl[boxindex][num] =true;
                }
            }
        }
        return true;
    }
}